package com.douma.第21天;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 抖码算法，让算法学习变的简单有趣
 *
 * @作者 : 老汤
 */
public class 字符串分割 {
    private static String s;
    private static List<List<String>> res;

    // 参考力扣真题 131. 分割回文串
    // 在课程 B【刷题篇第 26 天：动态规划（一）】 第 7 节
    // 链接：https://yjs.xet.tech/s/3ZJm6m
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        s = sc.nextLine();
        res = new ArrayList<>();

        // 先计算每个区间是不是水仙花数
        // 定义状态，dp[i][j] 表示子字符串区间 [i, j] 对应的子串累加和是否是水仙数
        boolean[][] dp = new boolean[s.length()][s.length()];
        // 状态转移
        for (int j = 0; j < s.length(); j++) {
            for (int i = 0; i < j; i++) {
                dp[i][j] = isShuiXianShu(s, i, j);
            }
        }

        dfs(0, new ArrayList<>(), dp);

        if (res.size() == 1) {
            System.out.println(res.get(0).size());
        } else if (res.size() == 0){
            System.out.println(0);
        } else {
            System.out.println(-1);
        }
        sc.close();
    }

    private static void dfs(int startIndex, List<String> path, boolean[][] dp) {
        if (startIndex == s.length()) {
            res.add(new ArrayList<>(path));
            return;
        }

        for (int i = startIndex; i < s.length(); i++) {
            int endIndex = i;
            // [startIndex, endIndex]
            if (!dp[startIndex][endIndex]) continue;
            path.add(s.substring(startIndex, endIndex + 1));
            dfs(i + 1, path, dp);
            path.remove(path.size() - 1);
        }
    }

    // 判断是否是水仙数
    private static boolean isShuiXianShu(String str, int left, int right) {

        int num = 0;
        for (int i = left; i <= right; i++) {
            num += str.charAt(i);
        }

        if (num <= 100 || num >= 999) return false;

        int b = num / 100; // 百位数
        int s = num % 100 / 10; // 十位数
        int g = num % 100 % 10; // 个位数

        if ((int)(Math.pow(b, 3) + Math.pow(s, 3) + Math.pow(g, 3)) == num) {
            return true;
        }

        return false;
    }
}
